package com.nys.conci.base.utilitario;

import java.text.MessageFormat;
import java.util.ResourceBundle;
import javax.faces.context.FacesContext;

/**
 * Clase encargada de obtener las etiquetas del recurso de mensajes.
 * @author Adam M. Gamboa González
 * @since 05 de Marzo de 2011
 */
public class EtiquetasUtil {
    
    private static final String ARCHIVO_ETIQUETA = "com.nys.conci.base.recursos.etiquetas";
    private static final String ARCHIVO_MENSAJE =  "com.nys.conci.base.recursos.mensajes";
    private static ResourceBundle recursoEtiquetas = null;
    private static ResourceBundle recursoMensaje = null;

    /**
     * Obtiene una propiedad identificada con la llave enviada como parametros,
     * para obtener un valor del archivo de etiquetas.
     * @param key Identificador de la etiqueta
     * @return Valor de la etiqueta
     */
    public static String obtenerEtiqueta(String key){
        try{
             if (recursoEtiquetas == null)
                recursoEtiquetas = ResourceBundle.getBundle(ARCHIVO_ETIQUETA,
                        FacesContext.getCurrentInstance().getViewRoot().getLocale());

            return recursoEtiquetas.getString(key);
        }catch(Exception ex){
            return "";
        }
    }
    
    /**

     * Retorna el mensaje, con las substituciones de cada parámetro {1} , {2}, {3} en el String de mensaje

     * @param key Identificador del mensaje

     * @param argumentos cada uno de los valores de reemplazo (Uno por cada valor reemplazable en el string)

     * @return java.lang.String mensaje, con las substituciones hechas.

     */

    public static String obtenerMensajeParametros(String key, String ... argumentos) {

        String original = obtenerMensaje(key);

        int i=1;

        for(String parametro : argumentos){

            String pattern = "{p"+ i++ +"}";

            original = original.replace(pattern, parametro);

        }

        return original;

    }

    /**
     * Retorna el mensaje internacionalizado para el key enviado, aplicando los parametros que
     *
     * @param key java.lang.String llave del valor
     * @param argumentos  java.lang.Object [] argumentos para aplicar al mensaje
     * @return java.lang.String mensaje internacionalizado
     */
    
    public static String obtenerEtiqueta(String key, Object ... argumentos) {
        MessageFormat format = new MessageFormat("");
        format.applyPattern(obtenerEtiqueta(key));
        return format.format(argumentos);
    }

    /**
     * Obtiene una propiedad identificada con la llave enviada como parametros,
     * para obtener un valor del archivo de mensajes.
     * @param key Identificador del mensaje
     * @return Valor del mensaje
     */
    public static String obtenerMensaje(String key){
        try{
             if (recursoMensaje == null)
                recursoMensaje = ResourceBundle.getBundle(ARCHIVO_MENSAJE,
                        FacesContext.getCurrentInstance().getViewRoot().getLocale());

            return recursoMensaje.getString(key);
        }catch(Exception ex){
            return "";
        }
    }
    
    /**
     * Retorna el mensaje internacionalizado para el key enviado, aplicando los parametros que
     *
     * @param key java.lang.String llave del valor
     * @param argumentos  java.lang.Object [] argumentos para aplicar al mensaje
     * @return java.lang.String mensaje internacionalizado
     */
    public static String obtenerMensaje(String key, Object ... argumentos) {
        MessageFormat format = new MessageFormat("");
        format.applyPattern(obtenerMensaje(key));
        return format.format(argumentos);
    }
}

